home *** CD-ROM | disk | FTP | other *** search
/ Amoszine 10 / Amoszine 10 (Disk 3 of 3).adf / menusys.lha / SOURCE_MSYSA.AMOS / SOURCE_MSYSA.amosSourceCode
Encoding:
AMOS Source Code  |  1993-07-24  |  32.2 KB  |  1,364 lines

  1. FIL$=Command Line$
  2. Request Wb 
  3.  
  4. Screen Open 1,640,256,8,Hires
  5. Paper 0 : Cls : Flash Off : Curs Off 
  6. Palette 0,0,0,0,0,0,0,0
  7.  
  8. Break Off 
  9. Limit Mouse 0,0 To 640,300
  10. Screen Display 1,,40,,
  11.  
  12. Dim MNU$(90,2),MNI(90,4),ARRS(10,4),RMOD$(8),WINCON(4),PAL(8)
  13. Global MNU$(),MNI(),ARRS(),RMOD$(),ERR,WINCON(),SFNT,_MODE,FIL$,VER$,_INDEX
  14. Global _RX,_ORX,_GX,_OGX,_BX,_OBX,PAL(),_SYS$
  15.  
  16. VER$="5.00A"
  17.  
  18. _INDEX=0
  19. _SYS$="SYS:"
  20.  
  21. _WIN
  22. _SEARCH["Peridot.Font"]
  23.  
  24. SFNT=Param
  25.  
  26. Set Font SFNT
  27. Gr Writing 0
  28.  
  29. _RUNMODES
  30.  
  31. If FIL$<>""
  32.    _LOAD[FIL$]
  33.    If Param=False
  34.       Amos To Front 
  35.       _CREDITS
  36.    End If 
  37. Else 
  38.    Amos To Front 
  39.    _CREDITS
  40. End If 
  41.  
  42. _NL=20
  43. _MODE=1
  44.  
  45. _PREFSET
  46. _EDITSCRN
  47. _SETDIS[_NL]
  48. _SCANMATRIX[_NL]
  49.  
  50. Procedure _SETDIS[BDOWN]
  51.    
  52.    Screen 1
  53.    
  54.    _BOX[0,240,430,9,False,2,4,3,1,"** MENU SYSTEM V"+VER$+" ** ",%11]
  55.  
  56.    _BOX[435,240,45,9,False,2,4,3,1,"SAVE",%11]
  57.    _BOX[485,240,45,9,False,2,4,3,1,"PREF",%11]
  58.    _BOX[535,240,45,9,False,2,4,3,1,"EXEC",%11]
  59.    _BOX[585,240,45,9,False,2,4,3,1,"QUIT",%11]
  60.  
  61.    If Amos Here=False
  62.       Amos To Front 
  63.    End If 
  64.    
  65.    For _ROW=1 To BDOWN
  66.       _REDO_ROW[_ROW-1]
  67.    Next 
  68.    
  69.    Fade 3,PAL(0),PAL(1),PAL(2),PAL(3),PAL(4),PAL(5),PAL(6),PAL(7)
  70.    Wait 3*15
  71.    
  72. End Proc
  73. Procedure _BOX[X,Y,W,H,INV,CINS,CHIG,CLOW,CTEX,TEX$,TTYP]
  74.    
  75.    If CINS<>-1
  76.       Ink CINS
  77.       Bar X,Y To X+W,Y+H
  78.    End If 
  79.    
  80.    If INV=False Then Ink CLOW Else Ink CHIG
  81.    Box X,Y To X+W,Y+H
  82.    
  83.    If INV=False Then Ink CHIG Else Ink CLOW
  84.    Draw X,Y To X+W,Y
  85.    Draw X,Y To X,Y+H
  86.    
  87.    If TEX$<>""
  88.       If Btst(0,TTYP)=True
  89.          TX=Text Length(TEX$)
  90.          TX=X+((W-TX)/2)
  91.       Else 
  92.          TX=X+6
  93.       End If 
  94.       If Btst(1,TTYP)=True
  95.          Ink 0
  96.          Text TX+1,Y+8,TEX$
  97.       End If 
  98.       Ink CTEX
  99.       Text TX,Y+7,TEX$
  100.    End If 
  101.    
  102. End Proc
  103. Procedure _SCANMATRIX[SZ]
  104.    
  105.    Screen 1
  106.    
  107.    _BXWD=157
  108.    _BXHI=11
  109.    _BXXS=2
  110.    _BXYS=14
  111.    
  112.    _MXY=_BXYS+(SZ*_BXHI)
  113.    _MXX=_BXXS+(4*_BXWD)
  114.    
  115.    _PARRAY[5,0,0,0,0,0]
  116.    _PARRAY[1,1,485,240,45,9] : Rem PREF 
  117.    _PARRAY[1,2,535,240,45,9] : Rem EDIT 
  118.    _PARRAY[1,3,435,240,45,9] : Rem SAVE 
  119.    _PARRAY[1,4,585,240,45,9] : Rem QUIT 
  120.    _PARRAY[0,5,0,0,0,0]
  121.    _PARRAY[0,6,0,0,0,0]
  122.    _PARRAY[0,7,0,0,0,0]
  123.    _PARRAY[0,8,0,0,0,0]
  124.    _PARRAY[0,9,0,0,0,0]
  125.    _PARRAY[0,10,0,0,0,0]
  126.    
  127.    Repeat 
  128.       Repeat 
  129.          MCOND=Mouse Key
  130.          If MCOND>0
  131.             
  132.             BT=-1
  133.             
  134.             MX=X Screen(X Mouse)
  135.             MY=Y Screen(Y Mouse)
  136.             
  137.             If MX>_BXXS and MX<_MXX
  138.                X=MX-_BXXS
  139.                If MY>_BXYS and MY<_MXY
  140.                   
  141.                   Y=MY-_BXYS
  142.                   
  143.                   _ROW=Int(Y/_BXHI)
  144.                   _COL=Int(X/_BXWD)
  145.                   BT=(_ROW*4)+_COL
  146.                   
  147.                   Rem If The Area Activated Is Part Of Another Button Then The Locates 
  148.                   Rem The Start Position Of The Button And Sets The Position Vector
  149.                   Rem To Point To The Start
  150.                   
  151.                   If MNI(BT,2)=-1
  152.                      _PCOL=_COL
  153.                      FOUND=False
  154.                      Repeat 
  155.                         Dec _PCOL
  156.                         If MNI((_ROW*4)+_PCOL,2)>-1
  157.                            FOUND=True
  158.                         End If 
  159.                      Until _PCOL=0 or FOUND=True
  160.                      _COL=_PCOL
  161.                      BT=(_ROW*4)+_COL
  162.                   End If 
  163.                   
  164.                   Rem Invert The Button If TYPE [MNI(BT,1)] Is Less Than 3 
  165.                   
  166.                   If MNI(BT,1)<4
  167.                      _INVERT_BUTTON[_ROW,_COL,BT]
  168.                   End If 
  169.                   
  170.                   Rem This Controls The Editing Of Buttons 
  171.                   
  172.                   If _MODE=2
  173.                      Wait 10 : _EDITCHK[BT]
  174.                      Screen 1
  175.                      
  176.                      If Param=True
  177.                         _REDO_ROW[_ROW]
  178.                      End If 
  179.                      
  180.                      _PARRAY[5,0,0,0,0,0]
  181.                      _PARRAY[1,1,485,240,45,9] : Rem PREF 
  182.                      _PARRAY[1,2,535,240,45,9] : Rem EDIT 
  183.                      _PARRAY[1,3,435,240,45,9] : Rem SAVE 
  184.                      _PARRAY[1,4,585,240,45,9] : Rem QUIT 
  185.                      _PARRAY[0,5,0,0,0,0]
  186.                      _PARRAY[0,6,0,0,0,0]
  187.                      _PARRAY[0,7,0,0,0,0]
  188.                      _PARRAY[0,8,0,0,0,0]
  189.                      _PARRAY[0,9,0,0,0,0]
  190.                      _PARRAY[0,10,0,0,0,0]
  191.                      
  192.                   End If 
  193.                End If 
  194.             End If 
  195.             
  196.             If BT=-1
  197.                If MY>240 and MY<249
  198.                   _EDITING_CONTROL[MX,MY]
  199.                End If 
  200.             End If 
  201.             
  202.             If MCOND=1 and BT>-1 and _MODE=1
  203.                If MNU$(BT,2)<>""
  204.                   If MNI(BT,1)<3
  205.                      _EXECUTE[BT]
  206.                   Else 
  207.                      If MNI(BT,1)=3
  208.                         If Exist(MNU$(BT,2))=True
  209.                            Fade 3,0,0,0,0,0,0,0,0
  210.                            Wait 3*15
  211.                            _LOAD[MNU$(BT,2)]
  212.                            _SETDIS[20]
  213.                         End If 
  214.                      End If 
  215.                   End If 
  216.                End If 
  217.             End If 
  218.             
  219.          End If 
  220.          
  221.       Until BT>0
  222.       
  223.    Until False
  224.    
  225. End Proc
  226. Procedure _EDITSCRN
  227.    
  228.    Screen Open 2,640,150,8,Hires
  229.    Paper 0 : Cls : Flash Off : Curs Off 
  230.    Screen To Front 2
  231.    Screen Hide 2
  232.    
  233.    Palette $0,$DDD,$666,$222,$AAA,$444,$111,$666
  234.    
  235.    Screen Display 2,,130,,98
  236.    
  237.    Set Font SFNT
  238.    Gr Writing 0
  239.    
  240.    Restore _EDDAT
  241.    For PIECE=1 To 32
  242.       Read X,Y,W,H,INV,CINS,CHIG,CLOW,CTEX,TEX$,TTYP
  243.       _BOX[X,Y,W,H,INV,CINS,CHIG,CLOW,CTEX,TEX$,TTYP]
  244.    Next 
  245.    
  246.    _EDDAT:
  247.    Data 0,0,630,9,False,2,4,3,1,"MENU ITEM EDITOR - MENU SYSTEM VERSION "+VER$,%11
  248.    Data 2,15,626,40,False,5,7,6,1,"ITEM"+Space$(10)+"TYPE"+Space$(17)+"SIZE"+Space$(10)+"COLOUR",%10
  249.    Data 45,17,30,9,True,0,7,6,1,"",%11
  250.    Data 153,16,94,11,True,5,7,6,1,"",0
  251.    Data 155,17,90,9,False,2,4,3,1,"",%11
  252.    Data 298,16,44,11,True,5,7,6,1,"",0
  253.    Data 300,17,40,9,False,2,4,3,1,"",%11
  254.    Data 10,34,354,11,True,5,7,6,1,"",0
  255.    Data 12,35,100,9,False,2,4,3,1,"FILENAME",%11
  256.    Data 118,35,240,9,True,0,7,6,1,"",%11
  257.    Data 370,34,240,11,True,5,7,6,1,"",0
  258.    Data 372,35,20,9,False,2,4,3,1,"X",%11
  259.    Data 398,35,206,9,True,0,7,6,1,"",%11
  260.    Data 2,57,626,40,False,5,7,6,1,"BUTTON PLACED IN MENU"+Space$(5)+"SEND COMMAND TO"+Space$(18)+"MENU",%10
  261.    Data 338,58,94,11,True,5,7,6,1,"",0
  262.    Data 340,59,90,9,False,2,4,3,1,"",%11
  263.    Data 498,58,94,11,True,5,7,6,1,"",0
  264.    Data 500,59,90,9,False,2,4,3,1,"",%11
  265.    Data 418,16,44,11,True,0,7,6,1,"",0
  266.    Data 420,17,40,9,False,2,4,3,1,"",%11
  267.    Data 488,16,64,11,True,0,7,6,1,"",0
  268.    Data 490,17,60,9,False,2,4,3,1,"DEF",%11
  269.    Data 558,16,64,11,True,0,7,6,1,"",0
  270.    Data 560,17,60,9,False,2,4,3,1,"EXIT",%11
  271.    Data 2,99,626,30,False,5,7,6,1,"TEXT ENTRY",%11
  272.    Data 27,111,512,11,True,5,7,6,1,"",%11
  273.    Data 29,112,50,9,False,2,4,3,1,"TEXT",%11
  274.    Data 85,112,448,9,True,3,7,6,1,"",%11
  275.    Data 548,111,54,11,True,5,7,6,1,"",0
  276.    Data 550,112,50,9,False,2,4,3,1,"DIR",%11
  277.    Data 4,100,20,11,True,5,7,6,1,"",0
  278.    Data 6,101,18,9,False,2,4,3,1,"Q",%11
  279.    
  280. End Proc
  281. Procedure _SCAN[X,Y]
  282.    
  283.    _FOUND=False
  284.    _FPOINT=0
  285.    _POINT=1
  286.    _NA=ARRS(0,0)
  287.    
  288.    Repeat 
  289.       
  290.       If ARRS(_POINT,0)=1
  291.          If X>ARRS(_POINT,1)
  292.             If Y>ARRS(_POINT,2)
  293.                If X<(ARRS(_POINT,1)+ARRS(_POINT,3))
  294.                   If Y<(ARRS(_POINT,2)+ARRS(_POINT,4))
  295.                      _FOUND=True
  296.                      _FPOINT=_POINT
  297.                   End If 
  298.                End If 
  299.             End If 
  300.          End If 
  301.       End If 
  302.       
  303.       If _FOUND=False
  304.          Inc _POINT
  305.       End If 
  306.       
  307.    Until _POINT=_NA or _FOUND=True
  308.    
  309. End Proc[_FPOINT]
  310. Procedure _PARRAY[O,ZNID,X,Y,W,H]
  311.    
  312.    ARRS(ZNID,0)=O
  313.    ARRS(ZNID,1)=X
  314.    ARRS(ZNID,2)=Y
  315.    ARRS(ZNID,3)=W
  316.    ARRS(ZNID,4)=H
  317.    
  318. End Proc
  319. Procedure _EDITCHK[BUT]
  320.    
  321.    Screen 2
  322.    
  323.    _BOX[45,17,30,9,True,0,7,6,1,Mid$(Str$(BUT),2),%11]
  324.    _BOX[118,35,240,9,True,0,7,6,1,Mid$(Upper$(MNU$(BUT,2)),1,29),%11]
  325.    _BOX[398,35,206,9,True,0,7,6,1,Mid$(Upper$(MNU$(BUT,0)),1,25),%11]
  326.    _BOX[300,17,40,9,False,2,4,3,1,Mid$(Str$(MNI(BUT,2)+1),2),%11]
  327.    
  328.    If MNI(BUT,1)<5
  329.       _BOX[420,17,40,9,False,2,4,3,1,Mid$(Str$(MNI(BUT,4)+1),2),%11]
  330.       _PARRAY[1,5,420,17,40,9] : Rem COLOUR 
  331.    Else 
  332.       _BOX[420,17,40,9,True,2,4,3,1,Mid$(Str$(MNI(BUT,4)+1),2),%11]
  333.       _PARRAY[0,5,0,0,0,0] : Rem COLOUR 
  334.    End If 
  335.    
  336.    If MNI(BUT,0)=0 Then _Q$="CLI" Else _Q$="MENU"
  337.    _BOX[340,59,90,9,False,2,4,3,1,_Q$,%11]
  338.    
  339.    If MNI(BUT,3)=0 Then _Q$="REMAINS" Else _Q$="SHRINKS"
  340.    _BOX[500,59,90,9,MNI(BUT,0)-1,2,4,3,1,_Q$,%11]
  341.    
  342.    _PLACE_BUTTON[BUT,MNI(BUT,2)+1,True]
  343.    
  344.    RTYPE=MNI(BUT,1)
  345.    
  346.    _BOX[155,17,90,9,False,2,4,3,1,Upper$(RMOD$(RTYPE)),%11]
  347.    
  348.    _PARRAY[11,0,0,0,0,0]
  349.    _PARRAY[1,1,12,35,100,9] : Rem FILENAME 
  350.    _PARRAY[1,3,155,17,90,9] : Rem RUN/EXECUTE Etc  
  351.    _PARRAY[1,4,560,17,60,9] : Rem EXIT 
  352.    
  353.    _PARRAY[1,6,490,17,60,9] : Rem DEFAULT  
  354.    _PARRAY[1,7,300,17,40,9] : Rem SIZE of button 
  355.    _PARRAY[1,8,372,35,20,9] : Rem X-tend Filename
  356.    _PARRAY[1,9,340,59,90,9] : Rem CLI/MENU 
  357.    
  358.    If MNI(BUT,0)=1
  359.       _PARRAY[1,10,500,59,90,9] : Rem MULTI/NOMULTI  tasking - NB Only when Button 9 = MENU !! 
  360.    Else 
  361.       _PARRAY[0,10,0,0,0,0]
  362.    End If 
  363.    
  364.    Screen Show 2
  365.    
  366.    FLAT=False
  367.    
  368.    Repeat 
  369.       
  370.       _MMODE=Mouse Key
  371.       
  372.       If _MMODE>0
  373.          MY=Y Screen(Y Mouse)
  374.          MX=X Screen(X Mouse)
  375.          
  376.          If MY>0 and MY<9
  377.                _SCRNMOV[MY,2,98,170]
  378.          Else 
  379.             _SCAN[MX,MY]
  380.             ZN=Param
  381.             If ZN>0
  382.                
  383.                _INVERTSEL[ZN]
  384.                
  385.                If ZN=1
  386.                   _FILEHANDLER[BUT,2]
  387.                   _BOX[118,35,240,9,True,0,7,6,1,Mid$(Upper$(MNU$(BUT,2)),1,29),%11]
  388.                End If 
  389.                
  390.                If ZN=2
  391.                   MP=630
  392.                   MZ=(MNI(BUT,2)+1)*152
  393.                   SP=Int((MP-MZ)/2)
  394.                   _TEXENT[SP,75,MZ,9,2,1,BUT,1,MZ-10,%11]
  395.                   FLAT=True
  396.                End If 
  397.                
  398.                If ZN=3
  399.                   If RTYPE=5
  400.                      _BOX[420,17,40,9,False,True,4,3,1,"",%11]
  401.                      _PARRAY[1,5,420,17,40,9] : Rem COLOUR 
  402.                   End If 
  403.                   If _MMODE=1
  404.                      RTYPE=(RTYPE+1) mod 6
  405.                   Else 
  406.                      If _MMODE=2
  407.                         RTYPE=RTYPE-1
  408.                         If RTYPE<0
  409.                            RTYPE=5
  410.                         End If 
  411.                      End If 
  412.                   End If 
  413.                   
  414.                   MNI(BUT,1)=RTYPE
  415.                   FLAT=True
  416.                   _BOX[155,17,90,9,False,2,4,3,1,Upper$(RMOD$(RTYPE)),%11]
  417.                   
  418.                   If RTYPE=5
  419.                      _BOX[420,17,40,9,True,True,4,3,1,"",%11]
  420.                      _PARRAY[0,5,0,0,0,0] : Rem COLOUR 
  421.                   End If 
  422.                End If 
  423.                
  424.                If ZN=5
  425.                   MNI(BUT,4)=MNI(BUT,4)+1
  426.                   If MNI(BUT,4)>1
  427.                      MNI(BUT,4)=0
  428.                   End If 
  429.                   _BOX[420,17,40,9,False,2,4,3,1,Mid$(Str$(MNI(BUT,4)+1),2),%11]
  430.                   FLAT=True
  431.                End If 
  432.                
  433.                If ZN=6
  434.                   For I=0 To MNI(BUT,2)
  435.                      MNU$(BUT+I,0)=""
  436.                      MNU$(BUT+I,1)=""
  437.                      MNU$(BUT+I,2)=""
  438.                      MNI(BUT+I,0)=0
  439.                      MNI(BUT+I,1)=0
  440.                      MNI(BUT+I,2)=0
  441.                      MNI(BUT+I,3)=0
  442.                      MNI(BUT+I,4)=0
  443.                   Next 
  444.                   FLAT=True
  445.                   RTYPE=0
  446.                   _BOX[300,17,40,9,False,2,4,3,1,"1",%11]
  447.                   _BOX[118,35,240,9,True,0,7,6,1,"",%11]
  448.                   _BOX[398,35,206,9,True,0,7,6,1,"",%11]
  449.                   _BOX[340,59,90,9,False,2,4,3,1,"CLI",%11]
  450.                   _BOX[500,59,90,9,True,2,4,3,1,"REMAINS",%11]
  451.                   _BOX[420,17,40,9,False,2,4,3,1,"1",%11]
  452.                   _PLACE_BUTTON[BUT,1,True]
  453.                   _PARRAY[0,10,0,0,0,0]
  454.                   _PARRAY[1,5,420,17,40,9] : Rem COLOUR 
  455.                   _BOX[155,17,90,9,False,2,4,3,1,Upper$(RMOD$(0)),%11]
  456.                End If 
  457.                
  458.                If ZN=7 and _MMODE=1
  459.                   _COL=BUT mod 4
  460.                   M=MNI(BUT,2)
  461.                   If M>0
  462.                      _MAKE_AVAIL[BUT,_COL,M]
  463.                   End If 
  464.                   Inc M
  465.                   If M>(3-_COL)
  466.                      M=0
  467.                   Else 
  468.                      _CHECK_AVAIL[BUT,_COL,M]
  469.                      If Param=True
  470.                         M=0
  471.                      End If 
  472.                   End If 
  473.                   MNI(BUT,2)=M
  474.                   MNU$(BUT,1)=""
  475.                   _BOX[300,17,40,9,False,2,4,3,1,Mid$(Str$(MNI(BUT,2)+1),2),%11]
  476.                   _PLACE_BUTTON[BUT,MNI(BUT,2)+1,True]
  477.                   FLAT=True
  478.                End If 
  479.                
  480.                If ZN=8
  481.                   _FILEHANDLER[BUT,0]
  482.                   _BOX[398,35,206,9,True,0,7,6,1,Mid$(Upper$(MNU$(BUT,0)),1,25),%11]
  483.                End If 
  484.                
  485.                If ZN=9
  486.                   If MNI(BUT,0)=0
  487.                      MNI(BUT,0)=1
  488.                      _Q$="MENU"
  489.                      _PARRAY[1,10,500,59,90,9]
  490.                   Else 
  491.                      MNI(BUT,0)=0
  492.                      _Q$="CLI"
  493.                      _PARRAY[0,10,0,0,0,0]
  494.                   End If 
  495.                   _BOX[340,59,90,9,False,2,4,3,1,_Q$,%11]
  496.                   If MNI(BUT,3)=0
  497.                      _Q$="REMAINS"
  498.                   Else 
  499.                      _Q$="SHRINKS"
  500.                   End If 
  501.                   _BOX[500,59,90,9,MNI(BUT,0)-1,2,4,3,1,_Q$,%11]
  502.                End If 
  503.                
  504.                If ZN=10
  505.                   If MNI(BUT,3)=0
  506.                      MNI(BUT,3)=1
  507.                      _Q$="SHRINKS"
  508.                   Else 
  509.                      MNI(BUT,3)=0
  510.                      _Q$="REMAINS"
  511.                   End If 
  512.                   _BOX[500,59,90,9,False,2,4,3,1,_Q$,%11]
  513.                End If 
  514.                
  515.             End If 
  516.          End If 
  517.       End If 
  518.       
  519.    Until ZN=4
  520.    
  521.    Screen Hide 2
  522.    
  523. End Proc[FLAT]
  524. Procedure _TEXENT[X,Y,W,H,CINS,CTEX,BT,EL,MXLEN,TTYP]
  525.    
  526.    Clear Key 
  527.    
  528.    CH$=" ABCDEGFGHIJKLMNOPQRSTUVWXYZ0123456789-',.<>/?;:#@[{]}|\+=-_)(*&^%$�!~"
  529.    
  530.    TEX$=MNU$(BT,EL)
  531.    
  532.    Repeat 
  533.       
  534.       C$=Upper$(Inkey$)
  535.       RETYP=False
  536.       CP=Instr(CH$,C$)
  537.       
  538.       If CP>0
  539.          TX=Text Length(TEX$)
  540.          If(TX+10)<MXLEN
  541.             TEX$=TEX$+C$
  542.             RETYP=True
  543.             TX=Text Length(TEX$)
  544.          End If 
  545.       Else 
  546.          S=Key Shift
  547.          If S=1 or S=2
  548.             If Key State(65)
  549.                TEX$=""
  550.                RETYP=True
  551.                TX=Text Length(TEX$)
  552.             End If 
  553.          Else 
  554.             If Key State(65)
  555.                If Len(TEX$)>0
  556.                   TEX$=Mid$(TEX$,1,Len(TEX$)-1)
  557.                   RETYP=True
  558.                   TX=Text Length(TEX$)
  559.                   Wait 5
  560.                End If 
  561.             End If 
  562.          End If 
  563.          
  564.       End If 
  565.       
  566.       If RETYP=True
  567.          Ink CINS
  568.          Bar X+1,Y+1 To X+W-1,Y+H-1
  569.          If TEX$<>""
  570.             If Btst(0,TTYP)=True
  571.                TX=X+((W-TX)/2)
  572.             Else 
  573.                TX=X+6
  574.             End If 
  575.             
  576.             If Btst(1,TTYP)=True
  577.                Ink 0
  578.                Text TX+1,Y+8,TEX$
  579.             End If 
  580.             Ink CTEX
  581.             Text TX,Y+7,TEX$
  582.          End If 
  583.       End If 
  584.       
  585.    Until C$=Chr$(13)
  586.    
  587.    MNU$(BT,EL)=TEX$
  588.    
  589. End Proc
  590. Procedure _RUNMODES
  591.    
  592.    Restore RMODS
  593.    
  594.    For I=0 To 5
  595.       Read RMOD$(I)
  596.    Next 
  597.    For I=0 To 7
  598.       Read PAL(I)
  599.    Next 
  600.    
  601.    RMODS:
  602.    Data "Run","Execute","Direct","Menu","Text","Blank"
  603.    Data $0,$DDF,$668,$224,$AAC,$446,$113,$668
  604.    
  605. End Proc
  606. Procedure _CREDITS
  607.    
  608.    Screen Open 3,640,256,8,Hires
  609.    Paper 0 : Cls : Flash Off : Curs Off 
  610.    Palette 0,0,0,0,0,0,0,0
  611.  
  612.    Screen Display 3,,40,,
  613.    Screen To Back 3
  614.    
  615.    Gr Writing 0
  616.    Set Font SFNT
  617.    
  618.    _BOX[0,10,630,9,False,2,4,3,1,"CREDITS",%11]
  619.    _BOX[2,25,626,224,False,5,7,6,1,"",0]
  620.    
  621.    Restore CREDDAT
  622.    
  623.    X=2
  624.    Y=30
  625.    
  626.    Repeat 
  627.       
  628.       Read A$
  629.       
  630.       If Len(A$)>MX Then MX=Len(A$)
  631.       
  632.       If A$<>"XXX"
  633.          
  634.          TX=Text Length(A$)
  635.          TX=X+((626-TX)/2)
  636.          
  637.          Ink 0 : Text TX+1,Y+8,A$
  638.          Ink 1 : Text TX,Y+7,A$
  639.          Add Y,8
  640.          
  641.       End If 
  642.       
  643.    Until A$="XXX"
  644.  
  645.    Screen To Front 3
  646.  
  647.    Fade 3,$0,$DDF,$668,$224,$AAC,$446,$113,$668
  648.    Wait 3*15
  649.  
  650.    Repeat 
  651.    Until Mouse Key=1
  652.  
  653.    Fade 3,0,0,0,0,0,0,0,0
  654.    Wait 3*30
  655.    
  656.    Screen Close 3
  657.    Screen 1
  658.    
  659.    CREDDAT:
  660.    Data "** MENU SYSTEM VERSION "+VER$+" **"
  661.    Data "BY"
  662.    Data "SAMUEL COLAK"
  663.    Data ""
  664.    Data "RELEASE DATE: 17TH JUNE 1993"
  665.    Data "OH BY THE WAY... THIS PROGRAM WAS WRITTEN AND COMPILED USING AMOS!!!"
  666.    Data "COMPATIBLE WITH ALL VERSIONS OF AMIGA !!"
  667.    Data ""
  668.    Data "THIS IS THE LATEST UPDATE OF MENU SYSTEM!!"
  669.    Data ""
  670.    Data "DISTRIBUTED BY AMIGA FORMAT !!"
  671.    Data ""
  672.    Data "THE FOLLOWING PEOPLE HAVE HELPED IN THE MAKING OF THIS PROGRAM"
  673.    Data ""
  674.    Data "BOB BRIGGS - BETA TESTING AND IDEAS"
  675.    Data "MATTHEW COLAK - DOCUMENTATION AND BETA TESTING"
  676.    Data "GILES MIDDLETON - BETA TESTING"
  677.    Data ""
  678.    Data "THIS PROGRAM IS PUBLIC DOMAIN.. THAT MEANS THAT A FEE CAN ONLY BE"
  679.    Data "CHARGED FOR THE DISK AND COPYING.."
  680.    Data ""
  681.    Data "SEE README.DOC FOR MORE INFORMATION"
  682.    Data ""
  683.    Data ""
  684.    Data "PRESS LEFT MOUSE BUTTON TO CONTINUE"
  685.    
  686.    Data "XXX"
  687.    
  688. End Proc
  689. Procedure _WINDOPEN[N,X,Y,XX,YY,NAME$,CL]
  690.  
  691.    X$=Str$(X)-" "
  692.    Y$=Str$(Y)-" "
  693.    XX$=Str$(XX)-" "
  694.    YY$=Str$(YY)-" "
  695.    CON$="CON:"+X$+"/"+Y$+"/"+XX$+"/"+YY$+"/"+NAME$
  696.    If CL=1
  697.       CON$=CON$+"/CLOSE"
  698.    End If 
  699.    CON$=CON$+Chr$(0)
  700.  
  701.    Dreg(1)=Varptr(CON$)
  702.    Dreg(2)=1005
  703.    WINCON(N)=Doscall(-30)
  704.  
  705.    If WINCON(N)=0
  706.       ERR=Doscall(-132)
  707.    End If 
  708.    
  709. End Proc
  710. Procedure _WINDEXECUTE[N,COM$]
  711.  
  712.    If WINCON(N)=0 Then Goto ERR
  713.  
  714.    COM$=COM$+Chr$(0)
  715.    Dreg(1)=Varptr(COM$)
  716.    Dreg(2)=0
  717.    Dreg(3)=WINCON(N)
  718.    X=Doscall(-222)
  719.    If X=0
  720.       Goto ERR
  721.    End If 
  722.    
  723.    Pop Proc
  724.  
  725.    ERR:
  726.    ERR=Doscall(-132)
  727.    
  728. End Proc
  729. Procedure _WINDCLOSE[N]
  730.    
  731.    If WINCON(N)=0 Then Goto ERR
  732.  
  733.    Dreg(1)=WINCON(N)
  734.    X=Doscall(-36)
  735.    If X=0
  736.       Goto ERR
  737.    End If 
  738.    Pop Proc
  739.  
  740.    ERR:
  741.    ERR=Doscall(-132)
  742.  
  743. End Proc
  744. Procedure _WIN
  745.    
  746.    If Exist("SYS:Fonts/Peridot.Font")=True
  747.       _WINDOPEN[1,400,0,240,10,"Menu System V"+VER$+"",0]
  748.    Else 
  749.       Screen Close 1
  750.       End 
  751.    End If 
  752.    
  753. End Proc
  754. Procedure _SEARCH[_FNT$]
  755.    
  756.    Get Disc Fonts 
  757.    N=1
  758.    _FNT$=Upper$(_FNT$)
  759.    Repeat 
  760.       F$=Mid$(Upper$(Font$(N)),1,Len(_FNT$))
  761.       If F$<>_FNT$
  762.          Inc N
  763.       End If 
  764.    Until F$=_FNT$
  765.    
  766. End Proc[N]
  767. Procedure _PLACE_BUTTON[BUT,SZ,RED]
  768.    
  769.    MP=630
  770.    MZ=SZ*152
  771.    MZ2=(4*152)+4
  772.    SP=(MP-MZ)/2
  773.    SP2=(MP-MZ2)/2
  774.    
  775.    If RED=True
  776.       Ink 5
  777.       Bar SP2,74 To SP2+MZ2,85
  778.       _BOX[SP-2,74,MZ+4,11,True,5,7,6,1,"",0]
  779.       _BOX[SP,75,MZ,9,False,2,4,3,1,MNU$(BUT,1),%11]
  780.    End If 
  781.    
  782.    _PARRAY[1,2,SP,75,MZ,9] : Rem BOX TEXT 
  783.    
  784.    If SZ>1
  785.       For PBUT=1 To SZ-1
  786.          MNI(BUT+PBUT,2)=-1
  787.       Next 
  788.    End If 
  789.    
  790. End Proc
  791. Procedure _INVERT_BUTTON[_ROW,_COL,BUT]
  792.    
  793.    SZ=153+(MNI(BUT,2)*157)
  794.    
  795.    If MNI(BUT,4)=0
  796.       CHIGH=7 : CLOW=6
  797.    Else 
  798.       CHIGH=4 : CLOW=3
  799.    End If 
  800.    
  801.    _BOX[2+(_COL*157),14+(_ROW*11),SZ,9,True,True,CHIGH,CLOW,1,"",0]
  802.    Repeat 
  803.    Until Mouse Key=0
  804.    _BOX[2+(_COL*157),14+(_ROW*11),SZ,9,False,True,CHIGH,CLOW,1,"",0]
  805.    
  806. End Proc
  807. Procedure _GENERATE_BUTTON[_ROW,_COL,BUT,TYPE]
  808.    
  809.    SZ=153+(MNI(BUT,2)*157)
  810.    
  811.    If MNI(BUT,1)<5
  812.       If TYPE=0
  813.          _BOX[2+(_COL*157),14+(_ROW*11),SZ,9,False,5,7,6,1,MNU$(BUT,1),%11]
  814.       End If 
  815.       
  816.       If TYPE=1
  817.          _BOX[2+(_COL*157),14+(_ROW*11),SZ,9,False,2,4,3,1,MNU$(BUT,1),%11]
  818.       End If 
  819.    Else 
  820.       Ink 0
  821.       Bar 2+(_COL*157),14+(_ROW*11) To 2+(_COL*157)+SZ,23+(_ROW*11)
  822.       If MNU$(BUT,1)>""
  823.          _BOX[2+(_COL*157),14+(_ROW*11),SZ,9,False,True,0,0,1,MNU$(BUT,1),%11]
  824.       End If 
  825.    End If 
  826.    
  827.    
  828. End Proc
  829. Procedure _EDITING_CONTROL[MX,MY]
  830.    
  831.    _SCAN[MX,MY]
  832.    
  833.    ZN=Param
  834.    If ZN>0
  835.       
  836.       _INVERTSEL[ZN]
  837.       
  838.       If ZN=1
  839.          _PREFCON
  840.          
  841.          Screen 1
  842.          _PARRAY[5,0,0,0,0,0]
  843.          _PARRAY[1,1,485,240,45,9] : Rem PREF 
  844.          _PARRAY[1,2,535,240,45,9] : Rem EDIT 
  845.          _PARRAY[1,3,435,240,45,9] : Rem SAVE 
  846.          _PARRAY[1,4,585,240,45,9] : Rem QUIT 
  847.          _PARRAY[0,5,0,0,0,0]
  848.          _PARRAY[0,6,0,0,0,0]
  849.          _PARRAY[0,7,0,0,0,0]
  850.          _PARRAY[0,8,0,0,0,0]
  851.          _PARRAY[0,9,0,0,0,0]
  852.          _PARRAY[0,10,0,0,0,0]
  853.          
  854.       End If 
  855.       
  856.       If ZN=2
  857.          If _MODE=1
  858.             _MODE=2
  859.             _BOX[535,240,45,9,False,2,4,3,1,"EDIT",%11]
  860.          Else 
  861.             _MODE=1
  862.             _BOX[535,240,45,9,False,2,4,3,1,"EXEC",%11]
  863.          End If 
  864.       End If 
  865.       
  866.       If ZN=3
  867.          _SAVE
  868.       End If 
  869.       
  870.       If ZN=4
  871.          Fade 2,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF
  872.          Wait 2*30
  873.          Fade 3,0,0,0,0,0,0,0,0
  874.          Wait 3*30
  875.          Amos To Back 
  876.          Wait 20
  877.          _WINDCLOSE[1]
  878.          Screen Close 1
  879.          Screen Close 2
  880.          Screen Close 3
  881.          End 
  882.       End If 
  883.    End If 
  884.    
  885. End Proc
  886. Procedure _EXECUTE[BUT]
  887.    
  888.    If MNI(BUT,0)=0
  889.       Fade 2,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF
  890.       Wait 2*30
  891.       Fade 3,0,0,0,0,0,0,0,0
  892.       Wait 3*30
  893.       Amos To Back 
  894.    End If 
  895.    
  896.    FL$=MNU$(BUT,2)
  897.    
  898.    MEM_PRES=Chip Free+Fast Free
  899.    
  900.    If Exist(FL$)=True
  901.       If MNI(BUT,1)=0
  902.          _WINDEXECUTE[1,_SYS$+"C/Run <Nil: >Nil: "+FL$+" "+MNU$(BUT,0)]
  903.       Else 
  904.          If MNI(BUT,1)=1
  905.             _WINDEXECUTE[1,_SYS$+"C/Execute "+FL$+" "+MNU$(BUT,0)]
  906.          Else 
  907.             If MNI(BUT,1)=2
  908.                _WINDEXECUTE[1,FL$+" "+MNU$(BUT,0)]
  909.             End If 
  910.          End If 
  911.       End If 
  912.    End If 
  913.    
  914.    If MNI(BUT,0)=0
  915.       Wait 20
  916.       _WINDCLOSE[1]
  917.       Screen Close 1
  918.       Screen Close 2
  919.       Screen Close 3
  920.       End 
  921.    Else 
  922.       If MNI(BUT,3)=1
  923.          
  924.          Repeat 
  925.             MEM_NOW=Chip Free+Fast Free
  926.             Multi Wait 
  927.          Until MEM_NOW<MEM_PRES
  928.          
  929.          _WINDCLOSE[1]
  930.          _WINDOPEN[1,300,0,340,10,"LEFT AMIGA + A - Return To Menu",0]
  931.          
  932.          Fade 3,0,0,0,0,0,0,0,0
  933.          Wait 3*30
  934.          Amos To Back 
  935.  
  936.          Repeat 
  937.             Multi Wait 
  938.             _FL=Amos Here
  939.          Until _FL=True
  940.          
  941.          Amos To Front 
  942.          Fade 3,PAL(0),PAL(1),PAL(2),PAL(3),PAL(4),PAL(5),PAL(6),PAL(7)
  943.          Wait 3*30
  944.          
  945.          _WINDCLOSE[1]
  946.          _WINDOPEN[1,400,0,240,10,"Menu System V"+VER$+"",0]
  947.          
  948.       End If 
  949.    End If 
  950.    
  951. End Proc
  952. Procedure _CHECK_AVAIL[BUT,_COL,SZ]
  953.    
  954.    _POINT=1
  955.    NAVAIL=False
  956.    CANT=False
  957.    
  958.    Repeat 
  959.       If MNI(BUT+_POINT,2)<>0
  960.          NAVAIL=True
  961.          CANT=True
  962.       Else 
  963.          Inc _POINT
  964.       End If 
  965.    Until _POINT=SZ+1 or NAVAIL=True
  966.    
  967. End Proc[CANT]
  968. Procedure _MAKE_AVAIL[BUT,_COL,SZ]
  969.  
  970.    For _POINT=1 To SZ
  971.       MNI(BUT+_POINT,2)=0
  972.    Next 
  973.    
  974. End Proc
  975. Procedure _REDO_ROW[_ROW]
  976.    
  977.    _COL=0
  978.    Ink 0
  979.    Bar 2,14+(_ROW*11) To 626,23+(_ROW*11)
  980.    BN=_ROW*4
  981.    
  982.    Repeat 
  983.       BUT=BN+_COL
  984.       If MNI(BUT,2)>-1
  985.          _GENERATE_BUTTON[_ROW,_COL,BUT,MNI(BUT,4)]
  986.       End If 
  987.       Inc _COL
  988.    Until _COL=4
  989.    
  990. End Proc
  991. Procedure _FILEHANDLER[BUT,EL]
  992.    
  993.    TX$=MNU$(BUT,EL)
  994.    
  995.    _BOX[85,112,448,9,True,0,7,6,1,TX$,%11]
  996.    
  997.    For PS=98 To 130 Step 2
  998.       Screen Display 2,,,,PS
  999.       Wait Vbl 
  1000.    Next 
  1001.    
  1002.    _PARRAY[4,0,0,0,0,0]
  1003.    _PARRAY[1,1,550,112,50,9] : Rem DIRectory
  1004.    _PARRAY[1,2,29,112,50,9] : Rem FILER  
  1005.    _PARRAY[1,3,6,101,18,9] : Rem EXIT 
  1006.    _PARRAY[0,4,0,0,0,0]
  1007.    _PARRAY[0,5,0,0,0,0]
  1008.    _PARRAY[0,6,0,0,0,0]
  1009.    _PARRAY[0,7,0,0,0,0]
  1010.    _PARRAY[0,8,0,0,0,0]
  1011.    _PARRAY[0,9,0,0,0,0]
  1012.    _PARRAY[0,10,0,0,0,0]
  1013.    
  1014.    Repeat 
  1015.       
  1016.       _MMODE=Mouse Key
  1017.       
  1018.       If _MMODE>0
  1019.          
  1020.          MY=Y Screen(Y Mouse)
  1021.          MX=X Screen(X Mouse)
  1022.          
  1023.          If MY>0 and MY<9
  1024.             _SCRNMOV[MY,2,130,170]
  1025.          Else 
  1026.             _SCAN[MX,MY]
  1027.             ZN=Param
  1028.             If ZN>0
  1029.                _INVERTSEL[ZN]
  1030.                
  1031.                If ZN=1
  1032.                   FIL$=Fsel$("","","Select File To Respond","")
  1033.                   If FIL$<>""
  1034.                      If MNU$(BUT,EL)=""
  1035.                         MNU$(BUT,EL)=MNU$(BUT,EL)+FIL$
  1036.                      Else 
  1037.                         MNU$(BUT,EL)=MNU$(BUT,EL)+" "+FIL$
  1038.                      End If 
  1039.                      _BOX[85,112,448,9,True,0,7,6,1,Upper$(MNU$(BUT,EL)),%11]
  1040.                   End If 
  1041.                End If 
  1042.                
  1043.                If ZN=2
  1044.                   _TEXENT[85,112,448,9,0,1,BUT,EL,448-10,%11]
  1045.                End If 
  1046.                
  1047.             End If 
  1048.          End If 
  1049.       End If 
  1050.       
  1051.    Until ZN=3
  1052.    
  1053.    For PS=130 To 98 Step -2
  1054.       Screen Display 2,,,,PS
  1055.       Wait Vbl 
  1056.    Next 
  1057.    
  1058.    _PARRAY[11,0,0,0,0,0]
  1059.    _PARRAY[1,1,12,35,100,9] : Rem FILENAME 
  1060.    _PLACE_BUTTON[BUT,MNI(BUT,2)+1,False]
  1061.    _PARRAY[1,3,155,17,90,9] : Rem RUN/EXECUTE Etc  
  1062.    _PARRAY[1,4,560,17,60,9] : Rem EXIT 
  1063.    
  1064.    If MNI(BUT,1)<5
  1065.       _PARRAY[1,5,420,17,40,9] : Rem COLOUR 
  1066.    Else 
  1067.       _PARRAY[0,5,0,0,0,0] : Rem COLOUR 
  1068.    End If 
  1069.    
  1070.    _PARRAY[1,6,490,17,60,9] : Rem DEFAULT  
  1071.    _PARRAY[1,7,300,17,40,9] : Rem SIZE of button 
  1072.    _PARRAY[1,8,372,35,20,9] : Rem X-tend Filename
  1073.    _PARRAY[1,9,340,59,90,9] : Rem CLI/MENU 
  1074.    _PARRAY[1,10,500,59,90,9]
  1075.    
  1076. End Proc
  1077. Procedure _PREFSET
  1078.    
  1079.    Screen Open 3,640,80,8,Hires
  1080.    Paper 0 : Cls : Flash Off : Curs Off 
  1081.    Screen To Front 3
  1082.    Screen Hide 3
  1083.    
  1084.    Palette $0,$DDD,$666,$222,$AAA,$444,$111,$666
  1085.    
  1086.    Screen Display 3,,130,,78
  1087.    
  1088.    Set Font SFNT
  1089.    Gr Writing 0
  1090.    
  1091.    Restore _PREFDAT
  1092.    For PIECE=1 To 22
  1093.       Read X,Y,W,H,INV,CINS,CHIG,CLOW,CTEX,TEX$,TTYP
  1094.       _BOX[X,Y,W,H,INV,CINS,CHIG,CLOW,CTEX,TEX$,TTYP]
  1095.    Next 
  1096.  
  1097.    Ink 7
  1098.    For X=0 To 15
  1099.       PX=40+(X*20)
  1100.       Text PX,56,"."
  1101.       Text PX,46,"."
  1102.       Text PX,36,"."
  1103.    Next 
  1104.    
  1105.    _PREFDAT:
  1106.    Data 0,0,630,9,False,2,4,3,1,"MENU PREFERENCE'S EDITOR",%11
  1107.    Data 2,15,626,62,False,5,7,6,1,"PALETTE",%10
  1108.    Data 558,16,64,11,True,5,7,6,1,"",0
  1109.    Data 560,17,60,9,False,2,4,3,1,"EXIT",%11
  1110.    Data 7,28,5,5,True,5,5,5,1,"R",%10
  1111.    Data 27,29,326,7,True,5,7,6,1,"",0
  1112.    Data 30,30,320,5,True,0,7,6,1,"",0
  1113.    Data 7,38,5,5,True,5,5,5,1,"G",%10
  1114.    Data 27,39,326,7,True,5,7,6,1,"",0
  1115.    Data 30,40,320,5,True,0,7,6,1,"",0
  1116.    Data 7,48,5,5,True,5,5,5,1,"B",%10
  1117.    Data 27,49,326,7,True,5,7,6,1,"",0
  1118.    Data 30,50,320,5,True,0,7,6,1,"",0
  1119.    Data 18,60,80,9,False,5,5,5,1,"COLOUR INDEX",%10
  1120.    Data 128,59,24,11,True,5,7,6,1,"",0
  1121.    Data 130,60,20,9,False,2,4,3,1,"<",%11
  1122.    Data 160,60,40,9,True,0,7,6,1,"",%11
  1123.    Data 208,59,24,11,True,5,7,6,1,"",0
  1124.    Data 210,60,20,9,False,2,4,3,1,">",%11
  1125.    Data 370,34,240,11,True,5,7,6,1,"",0
  1126.    Data 372,35,60,9,False,2,4,3,1,"SYS DIR",%11
  1127.    Data 438,35,166,9,True,0,7,6,1,"",%11
  1128.    
  1129. End Proc
  1130. Procedure _PREFCON
  1131.    
  1132.    Screen 3
  1133.    
  1134.    _BOX[160,60,40,9,True,0,7,6,1,Mid$(Str$(_INDEX),2),%11]
  1135.    _BOX[438,35,166,9,True,0,7,6,1,_SYS$,%11]
  1136.    
  1137.    Screen 1
  1138.    _CL=Colour(_INDEX)
  1139.    Screen 3
  1140.    
  1141.    _RX=Int((_CL and $F00)/256)
  1142.    _GX=Int((_CL and $F0)/16)
  1143.    _BX=_CL mod 16
  1144.    
  1145.    _PALETTE
  1146.    _ORX=_RX : _OGX=_GX : _OBX=_BX
  1147.    
  1148.    _PARRAY[5,0,0,0,0,0]
  1149.    _PARRAY[1,1,130,60,20,9] : Rem Decrease INDEX 
  1150.    _PARRAY[1,2,210,60,20,9] : Rem Increase INDEX 
  1151.    _PARRAY[1,3,372,35,60,9] : Rem SYSTEM DIR 
  1152.    _PARRAY[1,4,560,17,60,9] : Rem EXIT 
  1153.    _PARRAY[0,5,0,0,0,0]
  1154.    _PARRAY[0,6,0,0,0,0]
  1155.    _PARRAY[0,7,0,0,0,0]
  1156.    _PARRAY[0,8,0,0,0,0]
  1157.    _PARRAY[0,9,0,0,0,0]
  1158.    _PARRAY[0,10,0,0,0,0]
  1159.    
  1160.    Screen Show 3
  1161.    
  1162.    Repeat 
  1163.       
  1164.       _MMODE=Mouse Key
  1165.       
  1166.       If _MMODE>0
  1167.          
  1168.          MY=Y Screen(Y Mouse)
  1169.          MX=X Screen(X Mouse)
  1170.          
  1171.          If MY>0 and MY<9
  1172.             _SCRNMOV[MY,3,78,290]
  1173.          Else 
  1174.             _SCAN[MX,MY]
  1175.             ZN=Param
  1176.             
  1177.             If ZN>0
  1178.                _INVERTSEL[ZN]
  1179.                
  1180.                If ZN=1 or ZN=2
  1181.                   _NINDEX=_INDEX
  1182.                   If ZN=1
  1183.                      If _INDEX>0 : _NINDEX=_INDEX-1 : End If 
  1184.                   Else 
  1185.                      If _INDEX<7 : _NINDEX=_INDEX+1 : End If 
  1186.                   End If 
  1187.                   If _NINDEX<>_INDEX
  1188.                      _INDEX=_NINDEX
  1189.                      _BOX[160,60,40,9,True,0,7,6,1,Mid$(Str$(_INDEX),2),%11]
  1190.                      Screen 1
  1191.                      _CL=Colour(_INDEX)
  1192.                      Screen 3
  1193.                      _RX=Int((_CL and $F00)/256)
  1194.                      _GX=Int((_CL and $F0)/16)
  1195.                      _BX=_CL mod 16
  1196.                      _PALETTE
  1197.                      _ORX=_RX : _OGX=_GX : _OBX=_BX
  1198.                   End If 
  1199.                End If 
  1200.                
  1201.                If ZN=3
  1202.                   _ST$=MNU$(0,0) : MNU$(0,0)=_SYS$
  1203.                   _TEXENT[438,35,166,9,0,1,0,0,156,%11]
  1204.                   _SYS$=MNU$(0,0) : MNU$(0,0)=_ST$
  1205.                End If 
  1206.             End If 
  1207.             
  1208.             If MX>30 and MX<350 and MY>30 and MY<55
  1209.                If MY>30 and MY<35
  1210.                   _RX=Int((MX-30)/20)
  1211.                   If _RX<>_ORX
  1212.                      _BAR[_ORX,32,0]
  1213.                      _BAR[_RX,32,1]
  1214.                      _ORX=_RX
  1215.                      _MAKECOL
  1216.                   End If 
  1217.                End If 
  1218.                
  1219.                If MY>40 and MY<45
  1220.                   _GX=Int((MX-30)/20)
  1221.                   If _GX<>_OGX
  1222.                      _BAR[_OGX,42,0]
  1223.                      _BAR[_GX,42,1]
  1224.                      _OGX=_GX
  1225.                      _MAKECOL
  1226.                   End If 
  1227.                End If 
  1228.                
  1229.                If MY>50 and MY<55
  1230.                   _BX=Int((MX-30)/20)
  1231.                   If _BX<>_OBX
  1232.                      _BAR[_OBX,52,0]
  1233.                      _BAR[_BX,52,1]
  1234.                      _OBX=_BX
  1235.                      _MAKECOL
  1236.                   End If 
  1237.                End If 
  1238.             End If 
  1239.             
  1240.          End If 
  1241.       End If 
  1242.       
  1243.    Until ZN=4
  1244.    
  1245.    Screen Hide 3
  1246.    
  1247. End Proc
  1248. Procedure _BAR[XP,YP,_COL]
  1249.    
  1250.    Ink _COL
  1251.    Bar(XP*20)+36,YP To(XP*20)+44,YP+1
  1252.    
  1253. End Proc
  1254. Procedure _PALETTE
  1255.    
  1256.    _BAR[_ORX,32,0] : _BAR[_RX,32,1]
  1257.    _BAR[_OGX,42,0] : _BAR[_GX,42,1]
  1258.    _BAR[_OBX,52,0] : _BAR[_BX,52,1]
  1259.    
  1260. End Proc
  1261. Procedure _INVERTSEL[ZN]
  1262.    
  1263.    _BOX[ARRS(ZN,1),ARRS(ZN,2),ARRS(ZN,3),ARRS(ZN,4),True,True,4,3,1,"",0]
  1264.    Repeat 
  1265.    Until Mouse Key=0
  1266.    _BOX[ARRS(ZN,1),ARRS(ZN,2),ARRS(ZN,3),ARRS(ZN,4),False,True,4,3,1,"",0]
  1267.    
  1268. End Proc
  1269. Procedure _MAKECOL
  1270.  
  1271.    Screen 1
  1272.       _CL=(_GX*$10)+(_RX*$100)+_BX
  1273.       Colour _INDEX,_CL
  1274.    Screen 3
  1275.  
  1276. End Proc
  1277. Procedure _SAVE
  1278.    
  1279.    FIL$=Fsel$("","","Please Enter Filename To","Save Menu Data Under!!")
  1280.    Screen 1
  1281.    
  1282.    If FIL$<>""
  1283.       
  1284.       _CRIPT$="ABCDEFGHIJLKLMNOPQRSTUVWXYXZ"
  1285.       
  1286.       Open Out 1,FIL$
  1287.       Print #1,"5.00"
  1288.       Print #1,_SYS$
  1289.  
  1290.       For CL=0 To 7
  1291.          Print #1,Colour(CL)
  1292.       Next 
  1293.       
  1294.       For I=0 To 4
  1295.          _STR$=""
  1296.          For N=0 To 90
  1297.             _STR$=_STR$+Mid$(_CRIPT$,MNI(N,I)+2,1)
  1298.          Next 
  1299.          Print #1,_STR$
  1300.       Next 
  1301.       
  1302.       For I=0 To 2
  1303.          For N=0 To 90
  1304.             Print #1,MNU$(N,I)
  1305.          Next 
  1306.       Next 
  1307.       
  1308.       Close 1
  1309.       
  1310.    End If 
  1311.    
  1312. End Proc
  1313. Procedure _LOAD[FIL$]
  1314.    
  1315.    If Exist(FIL$)=True
  1316.       
  1317.       _CRIPT$="ABCDEFGHIJLKLMNOPQRSTUVWXYXZ"
  1318.       
  1319.       _FOUND=True
  1320.       Open In 1,FIL$
  1321.       
  1322.       Input #1,VS$
  1323.  
  1324.       If VS$="5.00"
  1325.  
  1326.          Input #1,_SYS$
  1327.          For CL=0 To 7
  1328.             Input #1,PAL(CL)
  1329.          Next 
  1330.          
  1331.          For I=0 To 4
  1332.             Input #1,_STR$
  1333.             For N=0 To 90
  1334.                CHAR$=Mid$(_STR$,N+1,1)
  1335.                MNI(N,I)=Instr(_CRIPT$,CHAR$)-2
  1336.             Next 
  1337.          Next 
  1338.          
  1339.          For I=0 To 2
  1340.             For N=0 To 90
  1341.                Line Input #1,MNU$(N,I)
  1342.             Next 
  1343.          Next 
  1344.  
  1345.       Else 
  1346.          _FOUND=False
  1347.       End If 
  1348.  
  1349.       Close 1
  1350.    Else 
  1351.       _FOUND=False
  1352.    End If 
  1353.    
  1354. End Proc[_FOUND]
  1355. Procedure _SCRNMOV[MY,SCRN,HIGH,MXY]
  1356.    
  1357.    Repeat 
  1358.       If Y Mouse<MXY
  1359.          Screen Display SCRN,,Y Mouse-MY,,HIGH
  1360.          Wait Vbl 
  1361.       End If 
  1362.    Until Mouse Key=0
  1363.    
  1364. End Proc